const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const path = require('path');
require('dotenv').config();

// 导入路由
const authRoutes = require('./src/routes/auth.routes');
const configRoutes = require('./src/routes/config.routes');

const app = express();

// 连接MongoDB
mongoose.connect(process.env.MONGODB_URI)
  .then(() => {
    // 使用环境变量来控制日志输出
    if (process.env.NODE_ENV !== 'production') {
      // eslint-disable-next-line no-console
      console.log('MongoDB连接成功');
    }
  })
  .catch((err) => {
    // 错误日志应该始终记录
    // eslint-disable-next-line no-console
    console.error('MongoDB连接失败:', err);
  });

// 中间件
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 静态文件服务
app.use(express.static(path.join(__dirname, 'public')));

// API路由
app.use('/api/auth', authRoutes);
app.use('/api/configs', configRoutes);

// 错误处理中间件
app.use((err, req, res, next) => {
  // 错误日志应该始终记录
  // eslint-disable-next-line no-console
  console.error(err.stack);

  // 如果headers已经发送，传递给Express的默认错误处理
  if (res.headersSent) {
    return next(err);
  }

  return res.status(500).json({
    success: false,
    message: '服务器内部错误',
  });
});

// 处理前端路由
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  // 在非生产环境下记录服务器启动信息
  if (process.env.NODE_ENV !== 'production') {
    // eslint-disable-next-line no-console
    console.log(`服务器运行在端口 ${PORT}`);
  }
});

module.exports = app;
